package br.ufpb.di.ppgi.negocio.servicos.login;

import br.com.caelum.vraptor.ioc.Component;
import br.ufpb.di.ppgi.negocio.iservicos.ILoginService;
import br.ufpb.di.ppgi.negocio.modelo.usuario.Usuario;
import br.ufpb.di.ppgi.negocio.modelo.usuario.UsuarioSessionInfo;
import br.ufpb.di.ppgi.persistencia.iquery.IUsuarioQuery;

@Component
class LoginServiceImpl implements ILoginService {
	
	private final IUsuarioQuery usuarioQuery;
	private final UsuarioSessionInfo usuarioSessionInfo;
	
	public LoginServiceImpl(IUsuarioQuery usuarioQuery, UsuarioSessionInfo usuarioSessionInfo) {
		this.usuarioQuery = usuarioQuery;
		this.usuarioSessionInfo = usuarioSessionInfo;
	}
	
	@Override
	public boolean isLogged() {
		return usuarioSessionInfo.isLogged();
	}

	@Override
	public boolean login(Credencial credential) {
		Usuario usuario = usuarioQuery.findByCredential(credential);
		return login(usuario);
	}

	private boolean login(Usuario usuario) {
		if (usuario == null)
			return false;
		usuarioSessionInfo.login(usuario);
		return true;
	}

	@Override
	public void logout() {
		usuarioSessionInfo.logout();
	}
	
}
